perm filename PUNCT.MF[CM,DEK]5 blob sn#795803 filedate 1985-06-15 generic text, type C, neo UTF8
COMMENT āŠ—   VALID 00021 PAGES
C REC  PAGE   DESCRIPTION
C00001 00001
C00003 00002	% This file contains punctuation marks common to roman and italic styles.
C00004 00003	cmchar "Exclamation point"
C00006 00004	iff known spanish_shriek: cmchar "Spanish open exclamation point"
C00008 00005	cmchar "Hash mark (number sign)"
C00010 00006	cmchar "Per cent sign"
C00013 00007	cmchar "Apostrophe"
C00014 00008	cmchar "Left parenthesis"
C00015 00009	cmchar "Right parenthesis"
C00016 00010	cmchar "Asterisk"
C00017 00011	cmchar "Plus sign"
C00018 00012	cmchar "Comma"
C00019 00013	cmchar "Period"
C00020 00014	cmchar "Virgule (slash)"
C00021 00015	cmchar "Colon"
C00022 00016	cmchar "Semicolon"
C00023 00017	cmchar "Equal sign"
C00024 00018	cmchar "At sign"
C00027 00019	cmchar "Left bracket"
C00029 00020	cmchar "Right bracket"
C00031 00021	cmchar "Reverse apostrophe"
C00032 ENDMK
CāŠ—;
% This file contains punctuation marks common to roman and italic styles.

% Codes \0041, \0043, \0045, \0047--\0054,\ %
%% \0056, \0057, \0072, \0073, \0075, \0100,\par
% \0133, \0135, and \0140 are generated, as well as code |spanish_shriek|
% (for a Spanish exclamation point) if that code value is known.
cmchar "Exclamation point";
beginchar("!",5u#+width_adj#,asc_height#,0);
italcorr asc_height#*slant-2u#-.5width_adj#+.5dot_size#;
adjust_fit(0,0);
pickup tiny.nib; penpos3(dot_size-tiny,0); penpos4(dot_size-tiny,90);
lft x3l=round(.5w-.5dot_size); bot y4l=0; z3=z4; dot(3,4);	% dot
numeric bot_width;
bot_width=if hefty:max(round .8dot_size,fine.breadth) else: hair fi;
pickup fine.nib; penpos1(dot_size-fine,0); penpos2(bot_width-fine,0);
x1=x2=x3; bot y2=.25[top y4r,x_height]+1;
if square_dots: top y1=h;
 filldraw stroke z1e..z2e;	% stem
else: top z0=(x1,h+o); y1+.5dot_size=h+o;
 filldraw z1r...z0...z1l---z2l--z2r---cycle; fi	% stem and bulb
penlabels(0,1,2,3,4); endchar;
iff known spanish_shriek: cmchar "Spanish open exclamation point";
beginchar(spanish_shriek,5u#+width_adj#,asc_height#-desc_depth#,desc_depth#);
italcorr h#*slant-2u#-.5width_adj#+.5dot_size#;
adjust_fit(0,0);
pickup tiny.nib; penpos3(dot_size-tiny,0); penpos4(dot_size-tiny,90);
lft x3l=round(.5w-.5dot_size); top y4r=h; z3=z4; dot(3,4);	% dot
numeric top_width;
top_width=if hefty:max(round .8dot_size,fine.breadth) else: hair fi;
pickup fine.nib; penpos1(dot_size-fine,0); penpos2(top_width-fine,0);
x1=x2=x3; top y2=.25[bot y4l,h-x_height]-1;
if square_dots: bot y1=-d;
 filldraw stroke z1e..z2e;	% stem
else: bot z0=(x1,-d-o); y1-.5dot_size=-d-o;
 filldraw z1l...z0...z1r---z2r--z2l---cycle; fi	% stem and bulb
penlabels(0,1,2,3,4); endchar;
cmchar "Hash mark (number sign)";
numeric dp#; .5[asc_height#,-dp#]=math_axis#;
if monospace: compute_spread(.6x_height#,.7x_height#);
else: compute_spread(.45x_height#,.55x_height#); fi
beginchar("#",15u#,asc_height#,dp#);
italcorr (math_axis#+.5(spread#+rule_thickness#))*slant-.5u#;
adjust_fit(0,0);
pickup rule.nib; lft x1=round u-epsilon; x3=x1; x2=x4=w-x1;
y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
draw z1..z2;	% upper bar
draw z3..z4;	% lower bar
lft x6=round 3u; rt x7=round(w-3u); x5-x6=x7-x8;
x8-x6=round(if monospace: .6 else: .5 fi\\w-x6);
top y5=top y7=h+epsilon; bot y6=bot y8=-d-epsilon;
y15=y1; z15=whatever[z5,z6]; y36=y3; z36=whatever[z5,z6];
y27=y2; z27=whatever[z7,z8]; y48=y4; z48=whatever[z7,z8];
draw z5--(good.x(x15+.5),y1)--(good.x(x15-.5),y1)
 --(good.x(x36+.5),y3)--(good.x(x36-.5),y3)--z6;	% left diagonal
draw z7--(good.x(x27+.5),y2)--(good.x(x27-.5),y2)
 --(good.x(x48+.5),y4)--(good.x(x48-.5),y4)--z8;	% right diagonal
labels(1,2,3,4,5,6,7,8,15,27,36,48); endchar;
cmchar "Per cent sign";
beginchar("%",9u#+max(6u#,2fudge*(hair#+stem#)),
  body_height#,body_height#-asc_height#);
italcorr if hefty: .4asc_height#*slant-.5u# else: h#*slant-u# fi;
adjust_fit(0,0);
numeric left_curve,right_curve;
left_curve=round(5/6[fudged.hair,fudged.stem]);
right_curve=max(fine.breadth,round(fudged.hair if hefty:-2stem_corr fi));
pickup fine.nib; penpos1(vair-fine,90); penpos2(left_curve-fine,180);
penpos3(vair-fine,270); penpos4(right_curve-fine,360);
top y1r=h; lft x2r=round u; rt x4r=round(.5w-1.5u);
bot y3r=floor(if monospace: .7 else: .5 fi\\ asc_height);
x1=x3=.5[x2,x4]; y2=y4=.5[y1,y3];
filldraw stroke pulled_super_arc.e(1,2)(superpull)
 & pulled_super_arc.e(2,3)(superpull);	% left half of upper bowl
filldraw stroke super_arc.e(3,4) & super_arc.e(4,1); % right half of upper bowl
penpos5(vair-fine,90); penpos6(left_curve-fine,180);
penpos7(vair-fine,270); penpos8(right_curve-fine,360);
bot y7r=-d; rt x8r=round(w-u); lft x6r=round(.5w+1.5u);
top y5r=round(if monospace: .3 else: .5 fi\\ asc_height);
x5=x7=.5[x6,x8]; y6=y8=.5[y5,y7];
filldraw stroke pulled_super_arc.e(5,6)(superpull)
 & pulled_super_arc.e(6,7)(superpull);	% left half of lower bowl
filldraw stroke super_arc.e(7,8) & super_arc.e(8,5); % right half of lower bowl
pickup rule.nib; top y9=h; bot y10=-d;
if hefty: x9=good.x(x5-epsilon); x10=good.x(x1+epsilon);
 draw z9..z10;	% diagonal
else: rt x9=round(w-1.5u); lft x10=round 2.5u; draw z9..z10;	% diagonal
 pickup fine.nib; penpos9(rule_thickness-fine,angle(z9-z10)+90);
 penpos11(vair-fine,angle(z1r-z4r)-90); penpos12(vair-fine,angle(z9-z10)+90);
 path p; p=super_arc.r(1,4); z11r=point 2/3 of p; z12r=z9r;
 filldraw stroke z11e{direction 2/3 of p}...{z9-z10}z12e; fi	% link
penlabels(1,2,3,4,5,6,7,8,9,10,11,12); endchar;
cmchar "Apostrophe";
beginchar("'",5u#,asc_height#,0);
italcorr asc_height#*slant+.5dot_size#-2u#;
adjust_fit(0,0);
x1-.5dot_size=round(.5w-.5dot_size); y1+.5dot_size=h;
if monospace: comma(1,a,dot_size,.28u,round 1.5comma_depth);	% large comma
else: comma(1,a,dot_size,.25u,comma_depth); fi	% comma with increased jut
penlabels(1); endchar;
cmchar "Left parenthesis";
beginchar("(",7u# if monospace: -u# fi,body_height#,body_depth#);
	  italcorr body_height#*slant-.5u#;
	  adjust_fit(0,0);
	  pickup fine.nib;
penpos1(vair-fine,0); penpos3(vair-fine,0);
penpos2(.75[hair,stem]-fine,0);
rt x1r=rt x3r=round(w-u); lft x2l=round(x1-4u if monospace: +4/3u fi);
top y1=h; y2=.5[y1,y3]=math_axis;
filldraw stroke z1e{3.5(x2e-x1e),y2-y1}..z2e
 ..{3.5(x3e-x2e),y3-y2}z3e;	% the stroke
penlabels(1,2,3); endchar;
cmchar "Right parenthesis";
beginchar(")",7u# if monospace: -u# fi,body_height#,body_depth#);
italcorr math_axis#*slant-.5u#;
adjust_fit(0,0);
pickup fine.nib;
penpos1(vair-fine,0); penpos3(vair-fine,0);
penpos2(.75[hair,stem]-fine,0);
lft x1l=lft x3l=round u; rt x2r=round(x1+4u if monospace: -4/3u fi);
top y1=h; y2=.5[y1,y3]=math_axis;
filldraw stroke z1e{3.5(x2e-x1e),y2-y1}..z2e
 ..{3.5(x3e-x2e),y3-y2}z3e;	% the stroke
penlabels(1,2,3); endchar;
cmchar "Asterisk";
beginchar("*",9u#,
  if low_asterisk:math_axis#+.5x_height# else: body_height# fi,0);
italcorr h#*slant-.75u#;
adjust_fit(0,0);
numeric ast_flare; ast_flare=round(.7[thin_join,stem]);
x0=.5w; y0=h-.5x_height;
for d=-150 step 60 until 150: z[d]=z0+.5dir d xscaled 7.5u yscaled x_height;
 numeric theta; theta=angle(z[d]-z0);
 fill z0+.5(0,-thin_join)rotated theta
  ---z[d]+.5(-ast_flare,-ast_flare)rotated theta
  ..z[d]..z[d]+.5(-ast_flare,ast_flare)rotated theta
  ---z0+.5(0,thin_join)rotated theta--cycle; endfor	% diagonal at angle |d|
labels(0,[-150],[-90],[-30],30,90,150); endchar;
cmchar "Plus sign";
beginarithchar("+");
pickup rule.nib; x1=x2=good.x .5w; top y1=h+epsilon; .5[y1,y2]=math_axis;
lft x3=round u-epsilon; x4=w-x3; y3=y4=math_axis;
draw z1..z2;	% stem
draw z3..z4;	% crossbar
labels(1,2,3,4); endchar;
cmchar "Comma";
numeric dot_diam#; dot_diam#=if monospace: 5/4 fi\\ dot_size#;
define_whole_blacker_pixels(dot_diam);
beginchar(",",5u#,dot_diam#,comma_depth#);
adjust_fit(0,0);
x1-.5dot_diam=round(.5w-.5dot_diam); y1-.5dot_diam=0;
comma(1,a,dot_diam,.2u,comma_depth);	% dot and tail
penlabels(1); endchar;
cmchar "Period";
numeric dot_diam#; dot_diam#=if monospace: 5/4 fi\\ dot_size#;
define_whole_blacker_pixels(dot_diam);
beginchar(".",5u#,dot_diam#,0);
adjust_fit(0,0);
pickup fine.nib; penpos1(dot_diam-fine,0); penpos2(dot_diam-fine,90);
lft x1l=round(.5w-.5dot_diam); bot y2l=0; z1=z2; dot(1,2);	% dot
penlabels(1,2); endchar;
cmchar "Virgule (slash)";
beginchar("/",9u#,body_height#,body_depth#); less_rounded;
italcorr body_height#*slant-.5u#;
adjust_fit(0,0);
pickup rule.nib; rt x1=round(w-u)+epsilon; top y1=h+epsilon;
lft x2=round u-epsilon; bot y2=-d-epsilon;
draw z1..z2;	% diagonal
penlabels(1,2); endchar;
cmchar "Colon";
numeric dot_diam#; dot_diam#=if monospace: 5/4 fi\\ dot_size#;
define_whole_blacker_pixels(dot_diam);
beginchar(":",5u#,x_height#,0);
italcorr x_height#*slant+.5dot_diam#-2u#;
adjust_fit(0,0);
pickup fine.nib; penpos1(dot_diam-fine,0); penpos2(dot_diam-fine,90);
lft x1l=round(.5w-.5dot_diam); top y2r=h; z1=z2; dot(1,2);	% upper dot
penpos3(dot_diam-fine,0); penpos4(dot_diam-fine,90);
x3=x1; bot y4l=0; z3=z4; dot(3,4);	% lower dot
penlabels(1,2,3,4); endchar;
cmchar "Semicolon";
numeric dot_diam#; dot_diam#=if monospace: 5/4 fi\\ dot_size#;
define_whole_blacker_pixels(dot_diam);
beginchar(";",5u#,x_height#,comma_depth#);
italcorr x_height#*slant+.5dot_diam#-2u#;
adjust_fit(0,0);
pickup fine.nib; penpos1(dot_diam-fine,0); penpos2(dot_diam-fine,90);
lft x1l=round(.5w-.5dot_diam); top y2r=h; z1=z2; dot(1,2);	% upper dot
x3-.5dot_diam=round(.5w-.5dot_diam); y3-.5dot_diam=0;
comma(3,a,dot_diam,.05u,comma_depth);	% lower dot and tail
penlabels(1,2,3); endchar;
cmchar "Equal sign";
compute_spread(.45x_height#,.55x_height#);
beginchar("=",14u#,v_center(spread#+rule_thickness#)); less_rounded;
italcorr h#*slant-.5u#;
adjust_fit(0,0);
pickup rule.nib; lft x1=round u-epsilon; x3=x1; x2=x4=w-x1;
y1=y2; y3=y4; y1-y3=spread; .5[y1,y3]=math_axis;
draw z1..z2;	% upper bar
draw z3..z4;	% lower bar
labels(1,2,3,4); endchar;
cmchar "At sign";
beginchar("@",14u#,asc_height#,0);
italcorr .7asc_height#*slant-.5u#;
adjust_fit(0,if hefty or monospace:-2u# else: 0 fi);
pickup fine.nib; penpos0(fudged.hair-fine,0); penpos1(vair-fine,90);
penpos2(fudged.stem-fine,180); penpos3(vair-fine,270);
penpos4(fudged.stem-fine,-180); penpos5(fudged.stem-fine,-180);
penpos6(vair-fine,-90); penpos7(fudged.hair-fine,0);
penpos8(vair-fine,90); penpos9(fudged.hair-fine,180);
penpos10(vair-fine,270); penpos11(.5[vair,flare]-fine,360);
x1=x3=.5[x0,x2]; y0=y2=.5[y1,y3];
x8=x10=.5w; y7=y9=.5[y8,y10];
lft x9r=round u; x7=w-x9; top y8r=h+oo; bot y10r=-oo;
top y1r=round(.8[y10,y8]+.5vair); bot y3r=round(.2[y10,y8]-.5vair);
x6l=1/3[x5l,x7l]; y6=y3; y11=good.y(.1[y10,y8]-.5);
x0=x4=x5; y4=.8[y3,y1]; y5=2/3[y7,y6];
if hefty or monospace: lft x2r=round(5u-.5fudged.stem);
 rt x0r=round(w-3u); x11r=x0r;
else: lft x2r=round(4u-.5fudged.stem); x0=w-x2; x11r=x7r; fi
filldraw stroke super_arc.e(1,2) & super_arc.e(2,3);	% left inner bowl
filldraw stroke super_arc.e(3,0) & super_arc.e(0,1);	% right inner bowl
filldraw stroke super_arc.e(8,9) & super_arc.e(9,10)
 & term.e(10,11,right,1,4);	% left outer bowl and terminal
if hefty or monospace: {{interim superness:=hein_super;
  filldraw stroke super_arc.e(0,8)}};	% link
else: (x,y6r)=whatever[z6l,z7l]; x6r:=x;
 filldraw stroke z4e---z5e...z6e{right}...{up}z7e
  & super_arc.e(7,8); fi % stem and link
penlabels(0,1,2,3,4,5,6,7,8,9,10,11); endchar;
cmchar "Left bracket";
numeric wd#; wd#=max(5u#,4.5u#+.5if hefty:stem# else:rule_thickness# fi);
beginchar("[",wd#,body_height#,body_depth#); less_rounded;
italcorr body_height#*slant;
adjust_fit(0,0);
numeric top_thickness,side_thickness;
if hefty: top_thickness=vair; side_thickness=stem-2stem_corr;
else: top_thickness=side_thickness=rule_thickness; fi;
pickup crisp.nib;
penpos1(side_thickness-crisp,0); penpos2(side_thickness-crisp,0);
top y1=h; bot y2=-d; lft x1l=lft x2l=round(2.5u-.5side_thickness);
filldraw stroke z1e..z2e;	% stem
penpos3(top_thickness-crisp,90); penpos4(top_thickness-crisp,90);
penpos5(top_thickness-crisp,90); penpos6(top_thickness-crisp,90);
x3=x5=x1l; rt x4=rt x6=round(w-.4u); y3r=y4r=y1; y5l=y6l=y2;
filldraw stroke z3e..z4e;	% upper bar
filldraw stroke z5e..z6e;	% lower bar
penlabels(1,2,3,4,5,6); endchar;
cmchar "Right bracket";
numeric wd#; wd#=max(5u#,4.5u#+.5if hefty:stem# else:rule_thickness# fi);
beginchar("]",wd#,body_height#,body_depth#); less_rounded;
italcorr body_height#*slant-2u#+.5if hefty:stem# else:rule_thickness# fi;
adjust_fit(0,0);
numeric top_thickness,side_thickness;
if hefty: top_thickness=vair; side_thickness=stem-2stem_corr;
else: top_thickness=side_thickness=rule_thickness; fi;
pickup crisp.nib;
penpos1(side_thickness-crisp,0); penpos2(side_thickness-crisp,0);
top y1=h; bot y2=-d; rt x1r=rt x2r=round(w-2.5u+.5side_thickness);
filldraw stroke z1e..z2e;	% stem
penpos3(top_thickness-crisp,90); penpos4(top_thickness-crisp,90);
penpos5(top_thickness-crisp,90); penpos6(top_thickness-crisp,90);
x3=x5=x1r; lft x4=lft x6=round .4u; y3r=y4r=y1; y5l=y6l=y2;
filldraw stroke z3e..z4e;	% upper bar
filldraw stroke z5e..z6e;	% lower bar
penlabels(1,2,3,4,5,6); endchar;
cmchar "Reverse apostrophe";
beginchar("`",5u#,asc_height#,0);
italcorr asc_height#*slant+.5dot_size#-2u#;
adjust_fit(0,0);
x1-.5dot_size=round(.5w-.5dot_size); y1+.5dot_size=h-comma_depth;
if monospace: ammoc(1,a,dot_size,.28u,round 1.5comma_depth);	% large ammoc
else: ammoc(1,a,dot_size,.25u,comma_depth); fi	% normal ammoc
penlabels(1); endchar;